/**
 * 普通业务模块示例
 */
define(['Util',
        '../common/getMenu',
        'list',
        'form',
        'dialog',
        'tab',
        'loading',
        'select',
        '../common/getPath',
        'text!tpl/tagList/tagList.tpl',
        'date',
        '../common/dateFormat' 
    ],
    function(Util, getMenu, List, Form, Dialog, Tab, Loading, Select, AjaxPath, tagListTpl, MyDate) {
        require(['style!css/style.css']);
        var $el = null;

        var _indexModule = null,
            list = null,
            dialog = null,
            tab = null,
            tplId = null,
            handLoading = null,
            loadingConfig = null,
            tagListCreateTime = null,
            tagListTypeSelect = null;
        var initialize = function(indexModule, options, tabItem) {
            $el = $(tagListTpl);
            _indexModule = indexModule;

            // 事件--点击切换tab后事件回调
            $(tabItem).on("tabActive", function() {
                tabItem.show(true); // 刷新表单
            });

            tab = tabItem;
            createLoading();
            tplId = options.menuId;

            // 业务相关代码
            eventInit();
            this.content = $el;

            initSelect();
            initDate();
            listInit();
            getMenu(tab, options.menuId);
        };

        var eventInit = function (){
            //页面除dialog按钮功能
            $el.on('click', '#tagListBtnDel', delDialogBox);
            $el.on('click', '.tagDeleteBtn', delDialogBox);
            $el.on('click', '.tagBtnSearch', search);
            $el.on('click', '.tagBtnReset', searchRest);
            $('#tabList li.' + tplId).on('click', tabActive);
        }

        var tabActive = function() {
            search();
            getMenu(tab, tplId);   
        }

        var search = function() {
            var data = Form.serialize($('.searchTagForm', $el));
            data.limit = 10;
            data.page = 1;
            list.search(data);
        }

        var searchRest = function(){
            $("input[name=name]",$el).val("");
            tagListTypeSelect.setValue(0);
            $("input[name=createPerson]",$el).val("");
            $("input[name=cycleTime]",$el).val("");
            $(".tagListContainer").find("a").removeClass("theSort");

            search();
        }

        var initSelect = function(){
            var config = {
                el:$('#tagListType', $el),       //要绑定的容器
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                    method:'GET'
                }, 
                label:'类型:', //下拉框单元左侧label文本，可不配置
                selectText:false,       //是否显示  ‘选择|清除’  模式
                name:'createModule',    //下拉框单元右侧下拉框名称
                disabled:false,     //组件是否被禁用
                topOption:"请选择", //设置最顶部option的text属性
                value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                valueField:"key",//设置下拉框value，填写数据中对应的字段名
                datas: [{value:"工作项",key:"require"},{value:"用例",key:"testcase"}],         //数据源
                loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                dataReady:function(){

                } //select的DOM结构加载完后执行
                //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
            }
            tagListTypeSelect = new Select(config);
            tagListTypeSelect.setValue(0);
        }

        var initDate = function(){
            tagListCreateTime = new MyDate( {
                el:$("#tagListCreateTime", $el),
                inputClassName:'date',
                label:'创建时间:',
                name:'cycleTime',    //开始日期文本框name
                isReadOnly:true,  //项可设置日期输入框是否只读
                min: -365,         //最小日期限制
                range:true,
                type:"date",
                inputPlaceholder:"请选择",
                defaultValue:"",
                btns:['clear', 'now', 'confirm'],
                done:function(dates,value,endDate){
                    console.log(dates)
                } //用户选中日期时执行的回调函数
            });
        }

        var listInit = function(){
            var config = {
                el: $('.tagListContainer', $el),
                ajax: {    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                    method:'GET'
                },
                field: {
                    boxType: 'checkbox',
                    key: 'id',
                    items: [
                    {
                        text: '标签名称',
                        name: 'name',
                        title: 'name',
                        className: 'w90',
                        sorting:1,
                        width:200,
                        click: function (e, val,item) {
                            // console.log(e,item)
                            $('input[name=name]', $el).val(val);
                            search();
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html(); 
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none;">' + val + '</a>';
                        }
                    },
                    {
                        text: '类型',
                        name: 'createModule',
                        className: 'w90',
                        sorting:1,
                        width:200,
                        render: function (item, val) {
                            return val;
                        }
                    },
                    {
                        text: '标签链接',
                        name: 'tagModuleTitle',
                        className: 'w90',
                        width:230,
                        click:function(e, val, item){
                            viewLink(e, item);
                        },
                        render: function (item, val) {
                            // return '<a href="javascript:;">1111'+ val ? val : '' +'</a>';
                            var typeStr = '';
                            if(item.type=='require'){
                                typeStr = '工作项';
                            }else if(item.type=='defect'){
                                typeStr = '缺陷';
                            }else if(item.type=='task'){
                                typeStr = '子工作项';
                            }else{
                                typeStr = '用例';
                            }

                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none;" title="'+ typeStr + '-' + (val ? val : "") +'">'+ typeStr + '-' + (val ? val : "") +'</a>';
                        }
                    },
                    {
                        text: '创建人',
                        name: 'createPerson',
                        className: 'w90',
                        width:150,
                        render: function (item, val) {
                            return val;
                        }
                    },
                    {
                        text: '创建时间',
                        title: '',
                        name: 'createTime',
                        className: 'w120',
                        sorting:1,
                        width:150,
                        render: function (item, val) {
                            return val ? new Date(val).Format("yyyy-MM-dd hh:mm:ss") : val;
                        }
                    },
                    {
                        text: '操作',
                        title: '',
                        name: '',
                        className: 'w90',
                        render: function (item, val) {
                            return '<div class="fn-center"><button class="t-btn t-btn-blue t-btn-xs tagDeleteBtn"><a style="color:#fff">删除</a></button></div>';
                        }
                    }]
                },
                page: {
                    customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                    perPage: 10, //默认每页显示多少条记录
                    total: true
                },
                data: {
                    url: AjaxPath.project + "/tag/getList"
                    // url:"../../../data/list1.json"
                }
            };
            list = new List(config);
            list.search();
        }

        var viewLink = function(e, item){
            $(".tagListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td").click();
            $(".tagListContainer .sn-list-show table tbody tr").eq(e.currentTarget.parentNode.rowIndex).find('td').click();

            var config = null;
            var datas = list.getCheckedRows();

            console.log(datas);
            var openLink = '';
            if(datas[0].type ==='require' || datas[0].type ==='defect'){
                openLink = 'js/requirement/viewRequirement';
            }else if(datas[0].type ==='task'){
                openLink = 'js/requirement/viewSubTask';
            }else if(datas[0].type ==='testcase'){
                openLink = 'js/case/viewCase';
            }
            var result = {};
            result.id = datas[0].refId;

            if(openLink===''){
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">暂无此模块数据！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                dialog = new Dialog(config);
            }else {
                require([ openLink ], function(viewLink) {
                    var resultViewLink = new viewLink({}, result, tab);
                    config = {
                        mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                        title: '查看:' + datas[0].tagModuleTitle, //对话框标题，
                        content: resultViewLink.content, //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                        cancelValue: '修改', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’//取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                        width: 1000, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 490, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                        maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        fixed: false, //是否开启固定定位 默认false不开启|true开启
                        quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                        modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                        backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                        backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                        beforeOpen: function() {
                            console.log('对话框打开时执行。');
                
                        }, //对话框打开之前执行。
                        escClose:true,//esc键快速关闭对话框，默认为true
                        zIndex:990   // 对话框的z-index值，默认是1024。
                    };
                    dialog = new Dialog(config);

                    $("#viewSubTaskAddBtn, #viewSubTaskEdit, .viewSubTaskEditBtn", resultViewLink.content).click(function(){
                        dialog.remove();
                    })
                });
            }
        }

        var delTag = function(e){
            
            handLoading = new Loading(loadingConfig);
            var nodes = list.getCheckedRows();
            if(nodes.length < 1) {
                handLoading.destroy();
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据进行删除！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                var dialog = new Dialog(config);
            } else {

                var data = "";
                for(var i = 0; i < nodes.length; i++) {
                    data += nodes[i].tagRefId + ',';
                }
                data = data.substring(0,data.length-1);

                console.log(nodes);
                if(nodes.length === 1){
                    Util.ajax.getJson(AjaxPath.project + '/tag/delete/'+ nodes[0].id +'/' + nodes[0].refId, {} ,function(result, isok) {
                        var flag = result.returnCode;
                        if(flag !== '0000') {
                            handLoading.destroy();
                            new Dialog({
                                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|tips确认对话框
                                title: '提示', //对话框标题
                                width: 300,
                                height: 120,
                                modal: true,
                                content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>', //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                                cancelDisplay: false,
                                ok: function() {}, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                                okValue: '关闭' //确定按钮的文本 默认是 ‘ok’
                            });
                            return;
                        } else if(flag === '0000'){
                            handLoading.destroy();
                            new Dialog({
                                mode: 'tips',
                                content: '<div style="text-align:center;margin-top:70px">删除成功！</div>',
                                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                cancelDisplay: false
                            });
                            search();
                        }
                    })
                } else {
                    Util.ajax.getJson(AjaxPath.project+"/tag/batchDelete?tagRefIds=" + data, {}, function(result, isok) {
                        var flag = result.returnCode;
                        if(flag === '0000'){
                            handLoading.destroy();
                            new Dialog({
                                mode: 'tips',
                                content: '<div style="text-align:center;margin-top:70px">批量删除标签成功!</div>',
                                width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                                height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                                cancelDisplay: false
                            });
                            search();
                        } else {
                            handLoading.destroy();
                            new Dialog({
                                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|tips确认对话框
                                title: '提示', //对话框标题
                                width: 300,
                                height: 120,
                                modal: true,
                                content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>', //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                                cancelDisplay: false,
                                ok: function() {}, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                                okValue: '关闭' //确定按钮的文本 默认是 ‘ok’
                            });
                        }  
                    })
                }
                
            }
        }

        var delDialogBox = function(e) {
            var config = null;
            if(e.currentTarget.id!=="tagListBtnDel"){
                $(".tagListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td").click();
                $(".tagListContainer .sn-list-show table tbody tr").eq(e.currentTarget.parentNode.parentNode.parentNode.rowIndex).find('td').click();
            }
            var nodes = list.getCheckedRows();
            if(nodes.length < 1 && e.currentTarget.id === 'tagListBtnDel') {
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据进行删除！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                var dialog = new Dialog(config);
            } else {
                config = {
                    mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                    title: "删除提示", //对话框标题
                    content: '<div style="text-align:center;margin-top:50px">确认删除选择的标签?</div>' /* + content.substring(0,content.length-1)*/ , //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    ok: function() {
                        delTag(e);
                        return true;
                    }, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                    okValue: '确定', //确定按钮的文本 默认是 ‘ok’
                    cancel: function() {}, //取消按钮的回调函数,配置该项时才会出现关闭按钮，回调函数可为空。
                    cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                    cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                    width: 300, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 120, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                    padding: '0 16px 1em 10px', //(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                    align: 'bottom right', //设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                    skin: 'dialogSkin dialogSkin2', //设置对话框额外的className参数,多个className请使用空格隔开。
                    fixed: true, //是否开启固定定位 默认false不开启|true开启
                    quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                    modal: true, //是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    beforeOpen: function() {}, //对话框打开之前执行。
                    zIndex: 990 // 对话框的z-index值，默认是1024。
                };
                var delDialog = new Dialog(config)
            }
        };

        var createLoading = function() {
            loadingConfig = {
                el: 'body', //组件要绑定的容器，默认为body（此项可不配置或留空）
                className: 'loading', //组件外围的className
                position: 'center', //提示信息位置，顶部top|默认center中央
                width: '300', //loading的宽度,非必须，默认300
                height: 'auto', //loading的宽度,非必须，默认auto
                mask: 1, //是否显示遮罩， 0不显示|默认1显示
                animate: 1, //是否显示动画效果， 0不显示|默认1显示
                mode: 'layer', //展示方式 loadingLine线条方式|默认layer弹层方式
                text: '加载中...', //提示文字，默认 加载中...
                icon: 'dotCycle', //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
            }
        }

        return initialize;
    });